﻿//X 星球居民小区的楼房全是一样的，并且按矩阵样式排列。其楼房的编号为1, 2, 3, ⋯ 。
//当排满一行时，从下一行相邻的楼往反方向排号。
//比如：当小区排号宽度为6 时，开始情形如下：
//1  2  3  4  5  6
//12 11 10 9  8  7
//13 14 15 .....
//我们的问题是：已知了两个楼号m 和n，需要求出它们之间的最短移动距离。（不能斜线方向移动）
//输入格式
//输入为3 个整数w, m, n，空格分开，都在1 到10000 范围内。w 为排号宽度，m, n 为待计算的楼号。
//输出格式
//要求输出一个整数，表示m 与n 两楼间最短移动距离。
//输入 6 8 2  输出 4
//输入 4 7 20 输出 5
#include<bits/stdc++.h>
using namespace std;
int main() {
	//有题列出矩阵可知，认为行号从0开始，行号为偶数的楼号所在列数是楼号对矩阵宽度取余
	//行号为奇数的楼号所在列数是矩阵宽度减去楼号对宽度取余再加一
	//这样就可以算出最小距离
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int w, m, n;
	cin >> w >> m >> n;
	int x1, x2, y1, y2;
	y1 = m % w; y2 = n % w;
	x1 = (m-1)/ w, x2 = (n-1) / w;//这里要减一是因为行号从0开始
	if (abs(y1 - y2) == 1) {//首先判断两个数是否为头数或尾数，若是，则进行行号相减即可
		cout << abs(x1 - x2);
		return 0;
	}
	if (x1 % 2 == 0) y1 = m % w;
	else y1 = w - m % w + 1;
	if (x2 % 2 == 0)y2 = n % w;
	else y2 = w - n % w + 1;
	
	cout << abs(y1 - y2) + abs(x1 - x2);
	return 0;
}//下面的是题解中的一个方法
//#include<bits/stdc++.h>
//using namespace std;
//int w, m, n, kx, ky, x = 0, y = 1;
//int main()
//{
//	scanf_s("%d%d%d", &w, &m, &n);
//	if (n > m) swap(n, m);
//	for (register int i = 1; i <= m; i++)    //枚举从1到m所有数的坐标
//	{
//		if (y % 2 == 1)    //正方向
//		{
//			x++;
//			if (x > w) x = w, y++;
//		}
//		else    //反方向
//		{
//			x--;
//			if (x < 1) x = 1, y++;
//		}
//		if (i == n) kx = x, ky = y;    //记录n的坐标
//	}
//	printf("%d", abs(kx - x) + abs(ky - y));
//	return 0;
//}